import http from 'wechat-http'

// 封装请求根路径
http.baseURL = 'https://live-api.itheima.net'
// 封装拦截器
// 请求前拦截器
http.intercept.request = options => {
  // 添加token请求头
  const app = getApp()
  // console.log(app.token)
  // app.token
  // console.log(options)
  const header = { ...options.header }
  if (!!app.token && !options.url.includes('/refreshToken')) {
    // console.log('执行')
    header.Authorization = app.token
  }
  // console.log(header)
  options.header = header
  return options
}
// 请求后拦截器
http.intercept.response = async res => {
  // 刷新token
  // console.log(res)
  if (res.data.code === 401) {
    // 添加token请求头
    const app = getApp()
    const pageStack = getCurrentPages()
    const currentPage = pageStack[pageStack.length - 1]

    if (res.config.url.includes('/refreshToken')) {
      // refreshToken过期
      // 跳转到登录页面
      wx.redirectTo({
        url: `/pages/login/index?from=/${currentPage.route}`
      })
      return
    }
    // 如果没有登录过,那么就不需要刷新token
    if (!app.refreshToken) return
    // token过期,刷新
    // 使用refreshToken获取新的token
    const tokenData = await wx.$http({
      url: '/refreshToken',
      method: 'POST',
      header: {
        Authorization: app.refreshToken
      }
    })
    app.setToken('token', `Bearer ${tokenData.data.token}`)
    app.setToken('refreshToken', `Bearer ${tokenData.data.refreshToken}`)
    // 重新发起请求
    // 之前的参数一个不能少 config authorization
    // 需要返回获取到的结果
    return wx.$http(
      Object.assign(res.config, {
        header: { Authorization: tokenData.data.token }
      })
    )
  }
  return res.data
}

// 挂载到全局
wx.$http = http

export default http
